#ifndef QUADTREE_H
#define QUADTREE_H

#include <stddef.h>
#include <stdbool.h>
#include "lista.h"

typedef struct quadtree quadtree_t;
typedef struct punto punto_t;

// Se crea el arbol vacio
// se debe pasar cmo parametro los puntos que forman el
// area del quadtree a crear. 
quadtree_t* quadtree_crear(int a ,int b, int c, int d);

// Se guarda un dato en el arbol.
// Pre: el arbol fue creado.
// Post: el arbol contiene un elemento mas si devuelve true,
// sino devuelve false.
bool quadtree_guardar(quadtree_t* quadt, void* sucursal);

// Destruyo el arbol por completo.
// Pre: el arbol fue creado.
// Post: se libera la memoria usada para generar al arbol.
void quadtree_destruir(quadtree_t* quadt);

// Informa los puntos dentro del rectangulo.
// Pre: el arbol fue creado.
// Post: devuelve una lista con los puntos dentro del rectanguo.
lista_t* quadtree_lista_puntos(quadtree_t* quadt , punto_t* punto);

// Informa si la sucursal pertenece al arbol.
// Pre: se creo el arbol.
// Post: devuelve true si pertenece y de lo contrario false.
bool pertenece_sucursal(quadtree_t* quadt , char* nombre);

#endif


